package com.example.activemq;

import javax.jms.Queue;
import javax.jms.Topic;

import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.annotation.EnableJms;

@SpringBootApplication
@EnableJms
public class ActivemqApplication {
	/*
	 * 声明一个quene消息队列：仅仅允许一个消息传送给一个客户。一个发送者将消息放在消息队列中，接受者从队列中抽取并得到消息，
	 * 消息就会在队列中消失。第一个接受者抽取并得到消息后，其他人就不能在得到它。
	 */
	@Bean
	public Queue queue() {
		return new ActiveMQQueue();
	}
		/**
	 * 消息重发机制
	 * @return
	 */
/*	 @Bean  
	    public RedeliveryPolicy redeliveryPolicy(){  
	            RedeliveryPolicy  redeliveryPolicy=   new RedeliveryPolicy();  
	            //是否在每次尝试重新发送失败后,增长这个等待时间  
	            redeliveryPolicy.setUseExponentialBackOff(true);  
	            //重发次数,默认为6次   这里设置为10次  
	            redeliveryPolicy.setMaximumRedeliveries(10);  
	            //重发时间间隔,默认为1秒  
	            redeliveryPolicy.setInitialRedeliveryDelay(1);  
	            //第一次失败后重新发送之前等待500毫秒,第二次失败再等待500 * 2毫秒,这里的2就是value  
	            redeliveryPolicy.setBackOffMultiplier(2);  
	            //是否避免消息碰撞  
	            redeliveryPolicy.setUseCollisionAvoidance(false);  
	            //设置重发最大拖延时间-1 表示没有拖延只有UseExponentialBackOff(true)为true时生效  
	            redeliveryPolicy.setMaximumRedeliveryDelay(-1);  
	            return redeliveryPolicy;  
	    }  */
	
	//声明一个topic:可以有多个客户端。用topic发布允许一对多，或多对多通讯通道。消息的产生者被叫做publisher,消息接受者叫做subscriber。
	//声明topic要在application.xml添加spring.jms.pub-sub-domain=true，但是加了这个后queue就不行了，所以还是不要加，使用@Bean注入
	//来保证两种方式
	@Bean
	public Topic topics() {
		return new ActiveMQTopic();
	}
	
	public static void main(String[] args) {
		SpringApplication.run(ActivemqApplication.class, args);
	}
}
